/**
 * 测试类：验证员工薪资计算、工资条生成、文件存储功能，包含正常与异常场景
 */
void main() {
    // 场景1：正常计算普通员工薪资并存储（小时工资25元，工作时长176小时（22天×8小时））
    try {
        Employee commonEmp = new CommonEmployee("E001", "张三", "2024-10", 25, 176);
        IO.println("普通员工[" + commonEmp.getName() + "]薪资计算结果：" + commonEmp.calculateSalary() + "元");
        IO.println(commonEmp.generateSalarySlip()); // 打印工资条
        SalaryStorage.saveSalarySlip(commonEmp); // 存储工资条
    } catch (WorkHourException | NegativeSalaryException | IOException e) {
        System.err.println("普通员工处理异常：" + e.getMessage());
    }

    // 场景2：正常计算管理人员薪资并存储（底薪15000元，奖金8000元）
    try {
        Employee managerEmp = new Manager("M001", "李四", "2024-10", 15000, 8000);
        IO.println("管理人员[" + managerEmp.getName() + "]薪资计算结果：" + managerEmp.calculateSalary() + "元");
        IO.println(managerEmp.generateSalarySlip()); // 打印工资条
        SalaryStorage.saveSalarySlip(managerEmp); // 存储工资条
    } catch (NegativeSalaryException | IOException e) {
        System.err.println("管理人员处理异常：" + e.getMessage());
    } catch (WorkHourException e) {
        throw new RuntimeException(e);
    }

    // 场景3：异常测试（普通员工工作时长超过上限）
    try {
        Employee invalidCommonEmp = new CommonEmployee("E002", "王五", "2024-10", 25, 300);
        invalidCommonEmp.calculateSalary();
    } catch (WorkHourException | NegativeSalaryException e) {
        System.err.println("异常测试（工作时长超限）：" + e.getMessage());
    }

    // 场景4：异常测试（管理人员奖金为负）
    try {
        Employee invalidManagerEmp = new Manager("M002", "赵六", "2024-10", 15000, -1000);
        invalidManagerEmp.calculateSalary();
    } catch (NegativeSalaryException e) {
        System.err.println("异常测试（奖金为负）：" + e.getMessage());
    } catch (WorkHourException e) {
        throw new RuntimeException(e);
    }
}
